package com.datastructure.test.robbery;

public class Robbery2 {

    public static void main(String[] args) {
        int [] data = {1,2,3,4};
        int [] data1 = {1,3,6};
        Robbery2 robbery2 = new Robbery2();
        System.out.println(robbery2.rob(data));
    }

    public int rob (int[] nums) {
        int temp;
        int max = 0;
        // write code here
        for (int i = 0; i < nums.length; i++) {
            nums = transformArray(nums);
            temp = rob1(nums);
            max = Math.max(max,temp);
        }
        return max;
    }

    public int[] transformArray(int[] nums){
        int temp = nums[0];
        for (int i = 0; i < nums.length-1; i++) {
            nums[i] = nums[i+1];
        }
        nums[nums.length-1]=temp;
        return nums;
    }

    public int rob1 (int[] nums) {
        // 只有一个元素，就返回该元素的值
        if(nums.length == 1){
            return nums[0];
        }
        // 两个元素，就返回两元素中其中一个最大值
        if(nums.length == 2){
            return Math.max(nums[0],nums[1]);
        }
        if(nums.length == 3){
            return nums[1];
        }
        // 定义一个数组，记录 n-1个值的和 和n-2个值的和
        int[] maxVal = new int[nums.length];
        // 初始化结果数组 第0 个元素和第 1个元素
        maxVal[0] = nums[0];
        maxVal[1] = Math.max(nums[0],nums[1]);
        for(int i = 2;i<nums.length-1;i++){
            maxVal[i] = Math.max(maxVal[i-1],maxVal[i-2]+nums[i]);
        }
        return maxVal[maxVal.length-2];
    }
}
